home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 1 / Cream of the Crop 1.iso / PROGRAM / PCL4C33.ARJ / PCL4C.USR < prev    next >
Text File  |  1992-08-01  |  68KB  |  1,742 lines

  1.  
  2.  
  3.                           Personal Communications Library
  4.  
  5.                                 For the C Language
  6.  
  7.  
  8.                                     (PCL4C)
  9.  
  10.  
  11.  
  12.                                  USERS MANUAL
  13.  
  14.  
  15.  
  16.  
  17.  
  18.                                   Version 3.3
  19.  
  20.                                   Aug 3, 1992
  21.  
  22.  
  23.  
  24.  
  25.                         This software is provided as-is.
  26.                  There are no warranties, expressed or implied.
  27.  
  28.  
  29.  
  30.  
  31.                               Copyright (C) 1992
  32.                               All rights reserved
  33.  
  34.  
  35.  
  36.                               MarshallSoft Computing, Inc.
  37.                               Post Office Box 4543
  38.                               Huntsville AL 35815
  39.  
  40.                               Voice 205-881-4630
  41.                               FAX   205-881-4630
  42.                               BBS   205-880-9748
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.         PCL4C Users Manual                                     Page 1
  61.                               C O N T E N T S
  62.  
  63.  
  64.  
  65.  
  66.  
  67.          Chapter                                                   Page
  68.  
  69.          1.0 Introduction................................................3
  70.              1.1 User Support............................................4
  71.              1.2 A Typical Application...................................5
  72.              1.3 Installation............................................6
  73.          2.0 Library Organization........................................7
  74.              2.1 Initialization & Termination............................7
  75.              2.2 Configuration...........................................7
  76.              2.3 Modem Control & Status..................................8
  77.              2.4 Serial I/O..............................................8
  78.              2.5 Error Detection.........................................9
  79.              2.6 General Support.........................................9
  80.          3.0 Library Overview...........................................10
  81.              3.1 Memory Models..........................................10
  82.              3.2 Compilers Supported....................................11
  83.              3.3 Using the Library......................................12
  84.              3.4 Example Programs.......................................12
  85.              3.5 Compiling & Linking....................................13
  86.          4.0 Talking to Your Modem......................................14
  87.              4.1 Modem Standards........................................14
  88.              4.2 Flow Control...........................................15
  89.              4.3 Modem Initialization...................................16
  90.          5.0 Problems...................................................17
  91.          6.0 Serial Communications......................................18
  92.              6.1 Communications Basics..................................18
  93.              6.2 Standard Port Addresses................................19
  94.              6.3 RS232 Signals..........................................20
  95.              6.4 National INS8250, INS16450, and INS16550 UARTs.........21
  96.              6.5 Register Summary.......................................22
  97.          7.0 Terminal Emulator Program (TERM)...........................24
  98.          8.0 Legal Issues...............................................25
  99.              8.1 Registration...........................................25
  100.              8.2 License................................................26
  101.              8.3 Warranty...............................................26
  102.          9.0 Summary....................................................27
  103.              9.1 Revision History.......................................27
  104.              9.2 Function Summary.......................................28
  105.              9.3 Further Reading........................................28
  106.         10.0 Other MarshallSoft Computing products......................29
  107.              10.1 The Personal Communications Library for Pascal........29
  108.              10.2 The Personal Protocol Library for C...................29
  109.              10.3 The Personal Protocol Library for Pascal..............29
  110.  
  111.  
  112.  
  113.  
  114.  
  115.  
  116.  
  117.  
  118.  
  119.  
  120.         PCL4C Users Manual                                     Page 2
  121.          1.0 Introduction
  122.  
  123.  
  124.          The Personal Communications Library for the C Language (PCL4C)  is
  125.          an  asynchronous  communications  library designed for experienced
  126.          software  developers  programming  in  C.   Four   compilers   are
  127.          supported:  Microsoft  Optimizing  C,  Microsoft  Quick C, Borland
  128.          Turbo C, and MIX Power  C.   An  IBM  PC/XT/AT  or  compatible  is
  129.          required.  The PCL features:
  130.  
  131.          o SMALL, COMPACT, MEDIUM & LARGE memory models.
  132.          o 32 communications and support functions.
  133.          o Support for the high performance INS16550 UART.
  134.          o Supports hardware (RTS/CTS) flow control.
  135.          o Interrupt driven receiver.
  136.          o Supports 300 baud to 115,200 baud.
  137.          o Supports COM1, COM2, COM3, and  COM4.
  138.          o Adjustable receive queues from 8 bytes to 32 KB.
  139.          o Control-BREAK error exit.
  140.          o 17 communications error conditions trapped.
  141.          o Allows 2 ports to run concurrently.
  142.          o Complete modem control & status.
  143.          o Written in assembly language for small size & high speed.
  144.          o Terminal program featuring XMODEM, YMODEM, & YMODEM-G.
  145.  
  146.          Why should you buy PCL4C ? I can give you several good reasons.
  147.  
  148.            COMPLETE - PCL4C is complete since it provides absolute control
  149.                       of the serial ports (including the high  performance
  150.                       INS16550).
  151.  
  152.             COMPACT - PCL4C  is  very compact  at  less  than  6  KB. Your
  153.                       application doesn't carry a lot of excess code.
  154.  
  155.                FAST - PCL4C is fast since it will  run  at  38400  baud  on
  156.                       even  slow  8088 PCs (4.77 MHZ) and at 115200 baud on
  157.                       most everything else.
  158.  
  159.             SUPPORT - If you get stuck,  you talk  to  the programmer  that
  160.                       wrote the code, not a  person  hired  to  answer  the
  161.                       phone.
  162.  
  163.                 BBS - A BBS is  available  (2400  baud  N81)  in  order  to
  164.                       provide immediate support as necessary.
  165.  
  166.          NEWSLETTER - One  year  subscription  to  the  MSC  newsletter
  167.                       discusses communications  problems  and  solutions
  168.                       (published quarterly).
  169.  
  170.               PRICE - You get PCL4C for a very reasonable price !
  171.  
  172.            UPGRADES - Once you buy PCL4C, you can always update to  the  most
  173.                       recent  version  for  little  more  than  the  cost  of
  174.                       sending it out to you.
  175.  
  176.  
  177.  
  178.  
  179.  
  180.         PCL4C Users Manual                                     Page 3
  181.          1.1 User Support
  182.  
  183.          We want you to be successful in developing your applications using
  184.          PCL4C!  We depend on our customers to let us know what  they  need
  185.          in  a  communications  library.   This  means  we are committed to
  186.          providing the best communications library that we can. If you have
  187.          any suggestions or comments, please let us know.
  188.  
  189.          If you are having a problem using PCL4C, call us  at  205-881-4630
  190.          between  5  PM  and 9 PM CST Monday through Saturday, or FAX us at
  191.          the same telephone number at any time (24 hours).   You  can  also
  192.          call at other times and leave a message, and call back later for a
  193.          reply.
  194.  
  195.          You  may  also  call our User Support BBS (2400 baud, no parity, 8
  196.          data bits, 1  stop  bit)  at  205-880-9748  and  leave  a  message
  197.          (address it to the SYSOP).  We will usually have a reply ready for
  198.          you within 24 hours.
  199.  
  200.          The  BBS  is available 24 hours per day except at 2 PM Sundays for
  201.          maintenanace. All files are in standard ZIP format. The  BBS  will
  202.          contain  the latest shareware version of all MarshallSoft products
  203.          as well as related files such as:
  204.  
  205.              BUGS.ZIP  --  Bug report.
  206.              NEWS.ZIP  --  Latest news regarding our products.
  207.  
  208.          The  MarshallSoft  Computing,  Inc.   newsletter  "Comm  Talk"  is
  209.          published quarterly.  It discusses various communications problems
  210.          and   solutions  using  PCL4C  as  well  as  related  information.
  211.          Registered users receive a  one  year  complimentary  subscription
  212.          when first registering and for each update purchased.
  213.  
  214.          Of  course, you can always write to us. You should receive a reply
  215.          within a week or so.
  216.  
  217.  
  218.  
  219.  
  220.  
  221.  
  222.  
  223.  
  224.  
  225.  
  226.  
  227.  
  228.  
  229.  
  230.  
  231.  
  232.  
  233.  
  234.  
  235.  
  236.  
  237.  
  238.  
  239.  
  240.         PCL4C Users Manual                                     Page 4
  241.          1.2 A Typical Application
  242.  
  243.  
  244.          In  general,  there  are  two  classes  of applications that use a
  245.          communications library like PCL4C -- those that  use  a  modem  to
  246.          connect  to the outside world and those that connect directly to a
  247.          peripheral device. In either case, a typical  application  program
  248.          using PCL4C might look like the following code outline:
  249.  
  250.  
  251.  
  252.          *****************************************************
  253.          * #include  "pcl4c.h"                               *
  254.          *                                                   *
  255.          * char Buffer[1024];                                *
  256.          * main()                                            *
  257.          * {/* initialize serial comm  system  */            *
  258.          *  SioRxBuf(Port,Buffer,Size1024);                  *
  259.          *  SioParms(Port,NoParity,OneStopBit,WordLength8);  *
  260.          *  SioReset(Port,Baud2400);                         *
  261.          *                                                   *
  262.          *  ...application code...                           *
  263.          *                                                   *
  264.          *  /*  terminate  serial  comm  system  */          *
  265.          *  SioDone(Port);                                   *
  266.          * }                                                 *
  267.          *****************************************************
  268.  
  269.  
  270.  
  271.          In the above example, SioRxBuf is called to set up the a 1024 byte
  272.          receive  buffer; SioParms is called to set up the parity, stop bit
  273.          count, and word length; SioReset is called to set the baud rate to
  274.          2400  and  reset  the  UART  (Univeral  Asynchronous  Receiver   /
  275.          Transmitter).
  276.  
  277.          Before  leaving your application, SioDone is called to restore the
  278.          prior state of the serial communications system.
  279.  
  280.          If  you  are  using  a  modem, you also need to be concerned about
  281.          initializing your modem correctly and handling any  required  flow
  282.          control. Refer to the "Talking to Your Modem" chapter for detailed
  283.          information.
  284.  
  285.  
  286.  
  287.  
  288.  
  289.  
  290.  
  291.  
  292.  
  293.  
  294.  
  295.  
  296.  
  297.  
  298.  
  299.  
  300.         PCL4C Users Manual                                     Page 5
  301.          1.3 Installation
  302.  
  303.  
  304.          (1) Before installation of PCL4C , your C compiler should  already
  305.          be  installed  on  your system and tested. If you are not familiar
  306.          with makefiles, refer to your compiler manual. If  you  are  using
  307.          the  interactive  environment  for  Quick C or Turbo C, be sure to
  308.          compile with the memory model corresponding to the  PCL4C  library
  309.          used.   Examine  the  file  "FILES.LST"  for  a  list  of  all the
  310.          distribution files.
  311.  
  312.          (2) Make a backup  copy  of  your  distribution  disk.   Put  your
  313.          original distribution disk in a safe place.
  314.  
  315.          (3)  Create  a  work  directory  on  your work disk (normally your
  316.          harddisk). For example, to create a work directory named PCL4C, we
  317.          first log onto the work disk and then type:
  318.  
  319.                                MKDIR PCL4C
  320.  
  321.          (4)  Copy  all the files from your backup copy of the distribution
  322.          disk to your work directory.  For example, to  copy  from  the  A:
  323.          drive to your work directory, we type:
  324.  
  325.                               CD PCL4C
  326.                               COPY A:*.*
  327.  
  328.          (5) [OPTIONAL] Delete the makefiles  that  you  won't  need.   For
  329.          example,  if  you  use  the Microsoft C compiler, then you want to
  330.          keep all makefiles ending *._M_ but can delete those for  Turbo  C
  331.          (*._T_), Quick C (*._Q_), and MIX Power C (X_*.BAT).  You may also
  332.          delete any libraries that you won't need.
  333.  
  334.          (6) Compile SIMPLE.C and link with the appropriate  PCL4C  library
  335.          (PCL4C_S.LIB  for  all  but  Power  C which must use PCL4C_S.MIX).
  336.          Makefiles  (or  project  files)  are  provided  for  each  of  the
  337.          supported compilers.
  338.  
  339.              a) Microsoft C: Type  MAKE SIMPLE._M_
  340.  
  341.              b) Microsoft Quick C: Type  MAKE SIMPLE._Q_
  342.  
  343.              c) Borland Turbo C: Type  MAKE -FSIMPLE._T_
  344.  
  345.              d) MIX Power C: Type X_SIMPLE
  346.  
  347.          SIMPLE.C  should  compile without any problems as all example code
  348.          has been tested with each of the supported compilers.
  349.  
  350.          (7) The recommended way to  test  SIMPLE  is  to  run  it  on  two
  351.          computers  connected  by a null modem cable.  Whatever is typed on
  352.          one computer should be displayed on the other.
  353.  
  354.  
  355.  
  356.  
  357.  
  358.  
  359.  
  360.         PCL4C Users Manual                                     Page 6
  361.          2.0 Library Organization
  362.  
  363.  
  364.          The  PCL4C  library is organized into six categories of functions.
  365.          Refer to the PCL  Reference  Manual  (PCL4C.REF)  for  details  on
  366.          individual functions.
  367.  
  368.  
  369.          2.1 Initialization & Termination
  370.  
  371.  
  372.          There are seven functions in the  initialization  and  termination
  373.          category.   Together,  SioParms,  SioFIFO,  SioRxBuf, and SioReset
  374.          initialize your serial communications  system.   Your  application
  375.          must  call  SioParms  and  SioRxBuf  before  calling SioReset, and
  376.          SioReset must be called before any serial I/O  processing  can  be
  377.          done.
  378.  
  379.          After initialization, SioParms and SioBaud can be called again  to
  380.          change  the communications parameters without resetting the serial
  381.          port. SioFlow can be called to enable hardware flow control.
  382.  
  383.          Before exiting from your  application,  SioDone  must  be  called.
  384.          Failure to call SioDone can crash your system later.
  385.  
  386.          SioRxBuf   -- Sets up receive buffer.
  387.          SioFIFO    -- Sets the interrupt level for the INS16550.
  388.          SioParms   -- Sets parity, stop bits, and word length.
  389.          SioReset   -- Initialize a serial port for processing.
  390.          SioDone    -- Terminates further serial processing.
  391.          SioBaud    -- Sets the baud rate of the selected port.
  392.          SioFlow    -- Enables / disables flow control.
  393.  
  394.          2.2 Configuration
  395.  
  396.  
  397.          There  are two functions in the configuration category. SioUART is
  398.          used to change the UART base address for a communications port  at
  399.          a   non-standard  address,  while  SioIRQ  is  used  to  assign  a
  400.          nonstandard  IRQ  line  to  a  port.    (See   the   chapter   IBM
  401.          Communications  Ports  for more details on standard UART addresses
  402.          and IRQ lines).
  403.  
  404.          The  configuration  category  functions  should  be  called before
  405.          calling SioReset in order to have any effect.  There is no  "error
  406.          checking" done, so be very careful in using these functions.
  407.  
  408.          SioUART -- Sets the UART base address.
  409.          SioIRQ  -- Assigns an IRQ line to a port.
  410.  
  411.  
  412.  
  413.  
  414.  
  415.  
  416.  
  417.  
  418.  
  419.  
  420.         PCL4C Users Manual                                     Page 7
  421.          2.3 Modem Control & Status
  422.  
  423.  
  424.          There  are  seven  functions  in  the  modem  control  and  status
  425.          category which provide your application with complete control over
  426.          the status and control bits of your modem.
  427.  
  428.          There are two modem control bits, "Data Terminal Ready" (DTR)  and
  429.          "Request  To  Send" (RTS). These bits can be read, set, or cleared
  430.          by SioDTR and SioRTS.
  431.  
  432.          There are four modem status bits, "Data Set Ready"  (DSR),  "Clear
  433.          To  Send"  (CTS), "Ring Indicator" (RI), and "Data Carrier Detect"
  434.          (DCD). SioModem can read any of the  modem  status  bits.  SioDSR,
  435.          SioCTS,  SioRI,  and  SioDCD  can only read their respective modem
  436.          status bit.
  437.  
  438.          Refer to the chapter entitled "RS232 Signals" for a discussion  of
  439.          each of the control and status bits.
  440.  
  441.          SioDTR    -- Set, clear, or read the Data Terminal Ready (DTR) bit.
  442.          SioRTS    -- Sets, clears, or reads the Request to Send (RTS) line.
  443.          SioModem  -- Reads the modem status register.
  444.          SioDSR    -- Reads the Data Set Ready (DSR) modem status bit.
  445.          SioCTS    -- Reads the Clear to Send (CTS) modem status bit
  446.          SioDCD    -- Reads the Data Carrier Detect (DCD) modem status bit.
  447.          SioRI     -- Reads the Ring Indicator (RI) modem status bit.
  448.  
  449.  
  450.          2.4 Serial I/O
  451.  
  452.  
  453.          There are six  library  functions  in  the  serial  I/O  category.
  454.          Together,  these  functions  give  the programmer complete control
  455.          over serial I/O.  Higher level functions  such  as  protocols  and
  456.          smart  modem communications can be completely implemented in terms
  457.          of these functions. Refer to the example code.
  458.  
  459.          SioGetc  and SioPutc perform all the actual serial I/O.  SioUnGetc
  460.          and SioRxFlush modify the receive queue. SioLine can  be  used  to
  461.          test for UART errors.
  462.  
  463.          SioGetc    -- Reads the next character from the serial line.
  464.          SioPutc    -- Transmit a character over a serial line.
  465.          SioUnGetc  -- "Un-gets" (puts back) a specified character.
  466.          SioRxFlush -- Flush (clears) the receive buffer.
  467.          SioRxQue   -- Returns the number of characters in the receive queue.
  468.          SioLine    -- Reads the line status register.
  469.  
  470.  
  471.  
  472.  
  473.  
  474.  
  475.  
  476.  
  477.  
  478.  
  479.  
  480.         PCL4C Users Manual                                     Page 8
  481.          2.5  Error Detection
  482.  
  483.  
  484.          There are four functions in the error detection category. They are
  485.          concerned with detecting or reporting communications errors.   Use
  486.          of  these  functions  can make your application significantly more
  487.          robust.
  488.  
  489.          SioBrkKey   can   be   used  as  an  "emergency"  exit  from  your
  490.          application. SioBrkSig can read or modify the UART break bit. This
  491.          is useful for signalling the remote system that a fatal  condition
  492.          has  occurred.  SioLoopBack  can  be used to test the integrity of
  493.          your UART.  SioError displays a error message corresponding to  an
  494.          error  code  returned  from a PCL4C function (every PCL4C function
  495.          returns a code).
  496.  
  497.          SioBrkKey -- Returns non-zero if the Control-BREAK key was pressed
  498.          SioBrkSig -- Asserts, cancels, or detects  BREAK  signal.
  499.          SioError  -- Displays  error  in  text.
  500.          SioLoopBack -- Performs a UART loopback test.
  501.  
  502.  
  503.          2.6 General Support
  504.  
  505.  
  506.          There are six functions in the general support category.  Strictly
  507.          speaking, they are not communications functions but  are  provided
  508.          in  the  PCL4C  library  because  they  are  not  always available
  509.          (especially in some older compiler run-time  libraries).   At  any
  510.          rate,  they  take  up  a  very  small amount of additional memory.
  511.          Registered users can also remove these functions from the  library
  512.          if needed.
  513.  
  514.          SioInfo     -- Returns the library version & memory model.
  515.          SioCrtWrite -- Write character to the screen.
  516.          SioDelay    -- Delays one or more tics.
  517.          SioKeyPress -- Detects if keyboard has been pressed.
  518.          SioKeyRead  -- Reads the keyboard.
  519.          SioTimer    -- Returns the number of system clock tics.
  520.  
  521.  
  522.  
  523.  
  524.  
  525.  
  526.  
  527.  
  528.  
  529.  
  530.  
  531.  
  532.  
  533.  
  534.  
  535.  
  536.  
  537.  
  538.  
  539.  
  540.         PCL4C Users Manual                                     Page 9
  541.          3.0 Library Organization
  542.  
  543.          3.1 Memory Models
  544.  
  545.  
  546.          Because of the segmented architecture of the INTEL CPU, there  are
  547.          four  memory  organizations possible for computer programs.  These
  548.          are named the SMALL, COMPACT, MEDIUM,  and  LARGE  memory  models,
  549.          which  correspond  to  the  four  combinations of "near" and "far"
  550.          addresses for code and data.
  551.  
  552.          Each  executable  is  composed of one or more segments, where each
  553.          segment can occupy from one byte to 64  KB  of  memory.  A  "near"
  554.          address  is  a 16 bit offset in a segment, whereas a "far" address
  555.          consists of both a 16 bit segment value and a 16 bit offset.
  556.  
  557.          In  the small memory model, code and data each occupy one segment.
  558.          Thus, near addresses are allocated for both code and data.
  559.  
  560.          In  the compact memory model, code occupies one segment while data
  561.          may occupy multiple segments. Near  addresses  are  allocated  for
  562.          code but far addresses are allocated for data.
  563.  
  564.          In  the  medium memory model, data occupies one segment while code
  565.          may occupy multiple segments. Near  addresses  are  allocated  for
  566.          data but far addresses are allocated for code.
  567.  
  568.          In the large memory model, data  and  code  each  occupy  multiple
  569.          segments.  Far  addesses  are  allocated  for  both code and data.
  570.          Thus, both code and data can use as many segments as required.
  571.  
  572.          Refer to your compiler manual  for  a  discussion  of  the  memory
  573.          models supported by your compiler.
  574.  
  575.          PCL4C  is  organized  as  four  separate  libraries  (PCL4C_S.LIB,
  576.          PCL4C_C.LIB, PCL4C_M.LIB and  PCL4C_L.LIB)  corresponding  to  the
  577.          four  standard  memory  models.  For the MIX Power C compiler, the
  578.          small,  medium,  and  large  models  are  provided   (PCL4C_S.MIX,
  579.          PCL4C_M.MIX  and  PCL4C_L.MIX).   MIX  doesn't support the compact
  580.          memory model.
  581.  
  582.  
  583.          MODEL      CODE      DATA     Library
  584.          Small      Near      Near     PCL4C_S.LIB & PCL4C_S.MIX
  585.          Compact    Near      Far      PCL4C_C.LIB
  586.          Medium     Far       Near     PCL4C_M.LIB & PCL4C_M.MIX
  587.          Large      Far       Far      PCL4C_L.LIB & PCL4C_L.MIX
  588.  
  589.  
  590.          However, one  can  always  use  the  large  memory  model  library
  591.          PCL4C_L.LIB  with  any memory model application code by explicitly
  592.          declaring the PCL4C procedures  to  be  FAR  (by  prefixing  "far"
  593.          before  the  name  of  each  function  in  the  PCL4C.H  file) and
  594.          declaring your receive buffer to be FAR. This was the method  used
  595.          in early versions of PCL4C.
  596.  
  597.  
  598.  
  599.  
  600.         PCL4C Users Manual                                     Page 10
  601.          3.2 Compilers Supported
  602.  
  603.  
  604.          At this time, four C compilers are supported by PCL4C.
  605.  
  606.          (1)  Microsoft Optimizing C Compiler
  607.  
  608.          (2)  Microsoft Quick C Compiler
  609.  
  610.          (3)  Borland Turbo C Compiler
  611.  
  612.          (4)  MIX Power C Compiler
  613.  
  614.          The  Microsoft  Optimizing  C Compiler supports all memory models.
  615.          Just be careful to link with the PCL4C library that corresponds to
  616.          the memory model used. Recall that the small memory model  is  the
  617.          default.   Examine  the  (small  model)  makefiles  *._M_  for the
  618.          Microsoft compiler.
  619.  
  620.          The Microsoft Quick C Compiler supports all memory models, but  be
  621.          careful  to  link with the PCL4C library that corresponds with the
  622.          memory model used.  Recall that the  small  memory  model  is  the
  623.          default  for  the  command  line  compiler  (QCL) while the medium
  624.          memory  model  is  the  default  for  the   interactive   compiler
  625.          environment.   Examine  the  (small model) makefiles *._Q_ for the
  626.          Microsoft Quick C compiler.
  627.  
  628.          The Borland Turbo C Compiler also supports all memory models.   Be
  629.          sure  to  link with the correct PCL4C library corresponding to the
  630.          memory model used.  Examine the (small model) makefiles *._T_  for
  631.          the Turbo C compiler.
  632.  
  633.          The  MIX  Power  C  Compiler supports the small, medium, and large
  634.          memory models. However, older versions of Power C only support the
  635.          small model.   Examine  the  (small  model)  project  batch  files
  636.          X_*.BAT for the Power C Compiler.
  637.  
  638.          Other compilers may also work  with  one  or  more  of  the  PCL4C
  639.          libraries  but  have  not been tested. Since registered users have
  640.          the source code to the library, it  should  not  be  difficult  to
  641.          modify PCL4C for use with any MSDOS C compiler.
  642.  
  643.  
  644.  
  645.  
  646.  
  647.  
  648.  
  649.  
  650.  
  651.  
  652.  
  653.  
  654.  
  655.  
  656.  
  657.  
  658.  
  659.  
  660.         PCL4C Users Manual                                     Page 11
  661.          3.3 Using the Library
  662.  
  663.  
  664.          The  PCL4C  has  been tested on a TANDY 1000 (4.77 MHZ 8088 IBM PC
  665.          clone), a TANDY 3000 (80286 IBM AT clone), a TANDY 1400LT (IBM  XT
  666.          clone),  and  a  Gateway  2000 Cache (25 MHZ 80386-DX).  PCL4C has
  667.          been tested under MSDOS 2.11, 3.2, 3.3, 4.01, and 5.0.
  668.  
  669.          Please examine the PCL4C.H file. Note that COM1 is defined as port
  670.          zero,  not  port  one.  The user must assume the responsibilty for
  671.          passing the correct  information  when  calling  PCL4C  functions.
  672.          Note  that  function  prototypes are provided in PCL4C.  But since
  673.          some  earlier  C  compilers  don't  support  function  prototypes,
  674.          PCL4C.H can be modified for no prototypes by changing the line
  675.  
  676.               #define PROTOTYPES 1
  677.  
  678.          to
  679.  
  680.               #define PROTOTYPES 0
  681.  
  682.  
  683.          3.4 Example Programs
  684.  
  685.  
  686.          Two communications programs are provided as a demonstration of the
  687.          PCL4C library -- SIMPLE and TERM.
  688.  
  689.          SIMPLE is provided as  the  simpliest  example  of  communications
  690.          programming using PCL4C. The user should compile and link SIMPLE.C
  691.          as a test of the library.
  692.  
  693.          If you have two computers, connect them together with a null modem
  694.          cable and run SIMPLE on both machines.  The baud rate in SIMPLE is
  695.          hard  coded to 2400 baud. It is easily changed in the source code.
  696.          Start SIMPLE by typing SIMPLE followed by the port. For example:
  697.  
  698.               SIMPLE 1
  699.  
  700.          Once SIMPLE is started on both computers, whatever is typed on one
  701.          machine should be displayed on the other, and vice versa.
  702.  
  703.          The  TERM program is a more capable terminal emulator than SIMPLE.
  704.          It features modem initialization, hardware flow control, and  file
  705.          transfer   using   XMODEM,  YMODEM,  and  YMODEM-G  communications
  706.          protocols.  TERM can be used to call up any bulletin board system,
  707.          including the MarshallSoft Computing BBS.  Start  TERM  by  typing
  708.          TERM followed by the port and baud rate. For example:
  709.  
  710.               TERM 4 2400
  711.  
  712.          Refer to the chapter "Terminal Emulator Program"  for  a  complete
  713.          discussion of TERM.
  714.  
  715.  
  716.  
  717.  
  718.  
  719.  
  720.         PCL4C Users Manual                                     Page 12
  721.          3.5 Compiling and Linking
  722.  
  723.  
  724.          Registered  users  may  wish  to  assemble PCL4C.ASM.  Use the /MX
  725.          switch in order to disable automatic conversion from lower case to
  726.          upper case.  If the  /MX  switch  is  not  used,  then  all  PCL4C
  727.          function  references  in C code must be in upper case. To assemble
  728.          using the Microsoft assembler:
  729.  
  730.          Model    Command
  731.  
  732.          Small    MASM PCL4C /DSMALL_MODEL /MX;
  733.          Compact  MASM PCL4C /DCOMPACT_MODEL /MX;
  734.          Medium   MASM PCL4C /DMEDIUM_MODEL /MX;
  735.          Large    MASM PCL4C /DLARGE_MODEL /MX;
  736.  
  737.          To make the (small) model PCL4C.OBJ into a library file:
  738.  
  739.                DEL PCL4C_S.LIB
  740.                LIB PCL4C_S.LIB+PCL4C,PCL4C.MAP;
  741.  
  742.          If you are using the MIX Power C Compiler, create the  MIX  object
  743.          file (you will need version 1.3 of MIX which has the /_ switch):
  744.  
  745.                MIX /_ PCL4C_S
  746.  
  747.          Similarly with the other memory  model  libaries.  See  the  batch
  748.          files MAKE_S.BAT, MAKE_C.BAT, MAKE_M.BAT, and MAKE_L.BAT.
  749.  
  750.          To compile and link (small model) using Microsoft C:
  751.  
  752.                cl /AS simple.c /link pcl4c_s.lib
  753.  
  754.          To compile and link (small model) using Microsoft Quick C:
  755.  
  756.                qcl /AS simple.c /link pcl4c_s.lib
  757.  
  758.          To compile and link (small model) using Turbo C:
  759.  
  760.                tcc -ms simple.c pcl4c_s.lib
  761.  
  762.          To compile and link (small model) using Power C:
  763.  
  764.                pc /ms simple.c
  765.                pcl simple pcl4c_s.mix
  766.  
  767.          Makefiles  or project files are provided for both SIMPLE and TERM.
  768.          Turbo C makefiles end  with  the  extension  '._T_',  Microsoft  C
  769.          makefiles  end  with '._M_', Microsoft Quick C makefiles files end
  770.          with '._Q_', and Power C project batch files start with  'X_'  and
  771.          end with '.BAT'.
  772.  
  773.  
  774.  
  775.  
  776.  
  777.  
  778.  
  779.  
  780.         PCL4C Users Manual                                     Page 13
  781.          4.0 Talking to Your Modem
  782.  
  783.  
  784.          A modem is  used  to  extend  the  distance  over  which  you  may
  785.          communicate.   Without  a  modem, your RS232 cable is limited to a
  786.          maximum of approximately 50  feet.  But  with  a  modem,  you  can
  787.          communicate literally around the world.
  788.  
  789.  
  790.          4.1 Modem Standards
  791.  
  792.  
  793.          Two modems can communicate over a telephone line only if they  are
  794.          both  using  the  same signaling frequencies and modulation, which
  795.          are determined by the the modem standards used.   Modem  standards
  796.          can  be  divided  into three sets: (1) speed, (2) data compression
  797.          used, and (3) error control.
  798.  
  799.          The Bell standards (103 & 212A) are those of AT&T.  The CCITT (The
  800.          International  Consultative Committee for Telephone and Telegraph)
  801.          standards are designated as "V. ".
  802.  
  803.  
  804.          Speed
  805.  
  806.          Bell 103  --   300 baud
  807.          Bell 212A --  1200 baud
  808.          V.21      --   300 baud
  809.          V.22bis   --  1200 & 2400 baud
  810.          V.32      --  4800 & 9600 baud
  811.          V.32bis   --  4800, 7200, 9600, 12000, and 14400 baud
  812.  
  813.  
  814.          Data Compression
  815.  
  816.          MNP 5     --  Microcom Networking Protocol (proprietary).
  817.          V.42bis   --  International data compression standard.
  818.  
  819.  
  820.          Error Control
  821.  
  822.          MNP 2,3,4 --  Three level error correction (public domain).
  823.          V.42      --  International error correction standard.
  824.  
  825.  
  826.  
  827.  
  828.  
  829.  
  830.  
  831.  
  832.  
  833.  
  834.  
  835.  
  836.  
  837.  
  838.  
  839.  
  840.         PCL4C Users Manual                                     Page 14
  841.          4.2 Flow Control
  842.  
  843.  
  844.          With modems using data compression, the modem to modem  connection
  845.          will  run  at various speeds depending on the quality of the line.
  846.          The computer to modem connection will be at  a  fixed  baud  rate.
  847.          Therefore,  a  protocol (flow control) is necessary to synchronize
  848.          the data flow  between  and  modems  and  the  computer  to  modem
  849.          connection.   Refer  to  your modem manual for information on flow
  850.          control protocols supported.
  851.  
  852.          Two  flow  control  protocols  are  used  by most all modems which
  853.          require flow control. Software flow control is  called  "XON/XOFF"
  854.          (other  software  flow  control  character  pairs  are defined but
  855.          operate the same as XON/XOFF) and hardware flow control is  called
  856.          "RTS/CTS".  Most modems which require flow control enable hardware
  857.          flow control by default.
  858.  
  859.          In   XON/XOFF  (software)  flow  control,  the  computer  suspends
  860.          transmitting data if it receives a XOFF character  (13  hex)  from
  861.          the  modem,  and  continues  transmitting  when  it receives a XON
  862.          character (11 hex).  Similiarly, the computer can signal the modem
  863.          not to send any more data by transmitting a XOFF to  it,  and  can
  864.          tell the modem to continue transmission be sending a XON.
  865.  
  866.          In  RTS/CTS  (hardware)  flow control, the RTS line is used by the
  867.          computer to signal the modem , while the CTS line is used  by  the
  868.          modem  to  signal  the  computer.  The  RTS line is set OFF by the
  869.          computer to tell the modem to suspend transmission, and set to  ON
  870.          to  tell  the modem to continue transmission.  The CTS line is set
  871.          to OFF by the modem to tell the computer to stop transmitting, and
  872.          set to ON to tell the computer to continue transmitting.
  873.  
  874.          Given  the  choice,  always  choose  hardware  flow  control  over
  875.          software   flow   control   so   that  all  data  transmission  is
  876.          transparent.  If hardware flow control is not the  default  (which
  877.          it almost always is), your should modify your modem initialization
  878.          string to turn hardware flow control on.
  879.  
  880.          Both software and hardware flow control is easy to implement using
  881.          PCL4C. See TERM_IO.C for an example of hardware flow control.
  882.  
  883.  
  884.  
  885.  
  886.  
  887.  
  888.  
  889.  
  890.  
  891.  
  892.  
  893.  
  894.  
  895.  
  896.  
  897.  
  898.  
  899.  
  900.         PCL4C Users Manual                                     Page 15
  901.          4.3 Modem Initialization
  902.  
  903.  
  904.          If your application uses a modem (as opposed to using a null modem
  905.          cable),  then  you  should always send an initialization string to
  906.          your modem if it is a programmable modem such  as  those  made  by
  907.          Hayes.   Communication  programs  such as PROCOMM and TELIX always
  908.          send such a string automatically as soon as they start up.
  909.  
  910.          The particular initialization string depends on the make  of  your
  911.          modem.   For Hayes and Hayes AT command set compatible modems, the
  912.          following string (followed by a carriage return) should work:
  913.  
  914.               AT E1 S7=60 S11=60 V1 X1 Q0 S0=0
  915.  
  916.          Refer to your Modem User's Guide for a full  discussion  of  these
  917.          commands. A brief description is as follows:
  918.  
  919.          AT     Modem attention command.
  920.          E1     Modem will echo what you send to it.
  921.          S7=60  Wait 60 seconds for carrier and/or dial tone.
  922.          S11=60 Use 60 milliseconds for tone dialing duration & spacing.
  923.          V1     Display result code as words (not numbers).
  924.          X1     Use the extended result message (CONNECT XXXX) set.
  925.          Q0     Modem returns result codes.
  926.          S0=0   Do not answer RING.
  927.  
  928.          If your application will answer incoming calls, then  set  the  S0
  929.          register to the ring on which to automatically answer.
  930.  
  931.          If you send the above codes by using SioPutc (as opposed to typing
  932.          them from the keyboard), then follow these guidelines:
  933.  
  934.          (1) Send an initial  carriage  return  before  the  initialization
  935.          string.
  936.  
  937.          (2) Pause at least two tics (18 tics to  the  second)  after  each
  938.          character  sent  as  your  modem needs the time to perform its own
  939.          internal processing.  Pause a little longer if your modem  is  not
  940.          accepting your initialization string.
  941.  
  942.          (3) Pause one and a half seconds after sending any  initialization
  943.          command  such  as ATZ or AT&F since your modem must do quite a bit
  944.          of processing.
  945.  
  946.          If you experience any problems in initializing your  Hayes  modem,
  947.          you should first reset it to factory settings by sending:
  948.  
  949.               AT&F
  950.  
  951.          Refer  to  the  TERM  program (functions SendTo and WaitFor in the
  952.          file MODEM_IO.C) for  an  example  of  sending  an  initialization
  953.          string to a Hayes compatible modem.
  954.  
  955.  
  956.  
  957.  
  958.  
  959.  
  960.         PCL4C Users Manual                                     Page 16
  961.          5.0 Problems
  962.  
  963.  
  964.          If  you cannot get your application to run properly, first compile
  965.          and run the  terminal  emulator  program  TERM  provided  on  your
  966.          distribution  disk.   If  you  are  using  a null modem cable or a
  967.          non-programmable modem, be sure to set the HAYES constant to 0  in
  968.          the  source  code  (#define  AT_COMMAND_SET 0). If you are using a
  969.          Hayes compatible modem, set the AT_COMMAND_SET constant to 1.   If
  970.          you  are using a programmable modem which is not Hayes compatible,
  971.          then you must modify the initialization string for your particular
  972.          modem.
  973.  
  974.          If your application does not run but TERM runs correctly, then you
  975.          have  most  likely made a programming mistake in your application.
  976.          MarshallSoft Computing cannot debug your  application,  especially
  977.          over  the telephone!  However, consider each of the following when
  978.          searching for an error in your application.
  979.  
  980.          1.  Have you included the file PCL4C.H in your application ?
  981.  
  982.          2.  Did you link with the correct PCL4C library  ?   This  is  the
  983.              most  probable cause if your application 'hangs' as soon as it
  984.              starts and you must reboot. The function SioInfo() returns the
  985.              the model ID under which the library was assembled.
  986.  
  987.          3.  Is your receive buffer large enough ? If you are using 1K data
  988.              blocks in YMODEM, then your receive buffer should be at  least
  989.              1K (2K if baud rates above 19200 are to be used).
  990.  
  991.          4.  Have you selected too high a baud rate  (if you  are  using  a
  992.              slow PC) ?   If only one COM port is being run, you should  be
  993.              able to run at 38400 baud on 8088 machines and 115200 on  most
  994.              286 and all 386 and 486 machines.
  995.  
  996.          5.  Are  you  attempting  to  run  another  application   in   the
  997.              background ?  Try running  without any other programs  running
  998.              in the background (unload all TSR programs).
  999.  
  1000.          6.  If you are running two COM ports simultaneously, are you using
  1001.              separate receive buffers ? (you should).
  1002.  
  1003.          7.  Did SioReset return a zero value ?  If not, then you must call
  1004.              SioReset again. See TERM.C for an example.
  1005.  
  1006.          8.  Did you send the proper initialization string to your modem  ?
  1007.              Did you set DTR and RTS ? (you should).
  1008.  
  1009.          9.  Do you have more than one COM1 port, etc.  For example, if you
  1010.              have a COM1 port on your motherboard,  you cannot add  another
  1011.              COM1  port  or  modem  board  that  uses  COM1  without  first
  1012.              disabling the COM1 on the motherboard.
  1013.  
  1014.  
  1015.  
  1016.  
  1017.  
  1018.  
  1019.  
  1020.         PCL4C Users Manual                                     Page 17
  1021.          6.0 Serial Communications
  1022.  
  1023.          6.1 Communications Basics
  1024.  
  1025.  
  1026.          The  heart  of  serial  communications  is  the  UART   (Universal
  1027.          Asynchronous   Receiver   Transmitter).    The  IBM  PC/XT/AT  and
  1028.          compatibles use the INS8250, INS16450, or the INS16550 UART.   The
  1029.          purpose of the UART is:
  1030.  
  1031.          (1)  To convert bytes from the CPU (Central Processing Unit), into
  1032.          a serial format by adding the necessary start,  stop,  and  parity
  1033.          bits  to  each byte before transmission, and to then transmit each
  1034.          bit at the correct baud rate.
  1035.  
  1036.          (2) To convert the incoming stream (at a specified baud  rate)  of
  1037.          serial  bits  into  bytes  by removing the start, stop, and parity
  1038.          bits before being made available to the CPU.
  1039.  
  1040.          The  UART  is  part of the serial interface circuitry which allows
  1041.          the CPU to send and receive signals over the RS232 lines. This can
  1042.          be diagrammed as follows:
  1043.  
  1044.                                Serial Interface
  1045.                             *********************
  1046.                             *                   *
  1047.          *******  Data Bus  *     ********      *    RS232 Signals
  1048.          * CPU **************     * UART *      ******************
  1049.          *******            *     ********      *
  1050.                             *                   *
  1051.                             *********************
  1052.  
  1053.          The  INS8250/16450/16550  UART  is  capable of operating in one of
  1054.          two  modes,  "polled"  and   "interrupt   driven".    The   serial
  1055.          communications  functions  in the BIOS uses the polled method.  In
  1056.          this approach, the CPU is typically in  a  loop  asking  the  UART
  1057.          over  and  over  again  if  it  has a byte ready. If its does, the
  1058.          polling code returns the byte.  But, if the  next  byte  comes  in
  1059.          before  the  polling  code  is  executing again, then that byte is
  1060.          lost.
  1061.  
  1062.          In  the  interrupt  driven  approach  (used  by PCL4C for incoming
  1063.          data), when a byte is received by the UART, an "Interrupt  Service
  1064.          Routine"  (ISR)  is  executed  immediately, suspending temporarily
  1065.          whatever else is executing.  The ISR then  moves  the  byte  to  a
  1066.          buffer  so  that your application program can later read it. Refer
  1067.          to the sections entitled "RS232  Signals"  and  "National  INS8250
  1068.          UART" for further information on these topics.
  1069.  
  1070.  
  1071.  
  1072.  
  1073.  
  1074.  
  1075.  
  1076.  
  1077.  
  1078.  
  1079.  
  1080.         PCL4C Users Manual                                     Page 18
  1081.          6.2 Standard Port Addresses
  1082.  
  1083.  
  1084.          There  are  a  few  things to know about how serial communications
  1085.          ports are used by  IBM  PC/XT/AT  and  compatible  computers.  The
  1086.          standard IBM PC/XT/AT configuration values are as follows:
  1087.  
  1088.          Port     Reg Base   IRQ Line   Vector
  1089.          COM1        3F8H        4        12
  1090.          COM2        2F8H        3        11
  1091.          COM3        3E8H        4        12
  1092.          COM4        2E8H        3        11
  1093.  
  1094.          PCL4C assumes the  above  values.  If  necessary,  the  UART  base
  1095.          address    can   be  changed  by  SioUART,  and  IRQ  lines can be
  1096.          re-assigned by SioIRQ. Refer to the  PCL4C  Reference  Manual  for
  1097.          specific details.
  1098.  
  1099.          When installing new communications cards, the following guidelines
  1100.          are recommended:
  1101.  
  1102.          (1) Be sure to read the documentation  for  the  hardware  you  are
  1103.          installing.   Pay special attention to UART base addresses and IRQ
  1104.          lines.
  1105.  
  1106.          (2) If you have a choice in base addresses and IRQ  lines,  always
  1107.          choose standard values as defined above.
  1108.  
  1109.          (3) The first port should be COM1, the second COM2, etc.
  1110.  
  1111.          (4)  Use  SioUART  to  zero  all  unused ports (for example, call
  1112.          SioUART(COM4,0) if there is no COM4 port installed).
  1113.  
  1114.          (5)  Be  carefull not to configure two ports for the same address.
  1115.          This is easier to do than you may believe.
  1116.  
  1117.          (6) Choose an external modem over an internal  one.   It  is  much
  1118.          easier  to  debug problems with an external modem than an internal
  1119.          one.
  1120.  
  1121.          (7)  Select  hardware  flow  control  (RTS/CTS) if flow control is
  1122.          required and hardware flow control is not the default.
  1123.  
  1124.          (8) Always test your port as soon as it is installed.
  1125.  
  1126.  
  1127.  
  1128.  
  1129.  
  1130.  
  1131.  
  1132.  
  1133.  
  1134.  
  1135.  
  1136.  
  1137.  
  1138.  
  1139.  
  1140.         PCL4C Users Manual                                     Page 19
  1141.          6.3 RS-232 Signals
  1142.  
  1143.  
  1144.          RS-232 is the name of the serial data interface standard  used  to
  1145.          connect  computers  to  modems.  Most IBM compatible computers are
  1146.          built with at least one serial port and use either DB9 (9 pin)  or
  1147.          DB25 (25 pin) connectors.
  1148.  
  1149.          A summary of these pins and  their  function  follows.   For  more
  1150.          detailed  information, refer to one of the many books dealing with
  1151.          RS-232 interfacing.
  1152.  
  1153.          Signal Ground Pin 7 (DB25), Pin 5 (DB9)
  1154.  
  1155.          The SG line is used as the common signal ground, and  must  always
  1156.          be connected.
  1157.  
  1158.          Transmit Data Pin 2 (DB25), Pin 3 (DB9)
  1159.  
  1160.          The TX line is used to carry data from the computer to the modem.
  1161.  
  1162.          Receive Data Pin 3 (DB25), Pin 2 (DB9)
  1163.  
  1164.          The RX line is used to carry data from the modem to the computer.
  1165.  
  1166.          Data Terminal Ready Pin 20 (DB25), Pin 4 (DB9)
  1167.  
  1168.          The  DTR  line is used by the computer to signal the modem that it
  1169.          is ready. DTR should be set high when talking to a modem.
  1170.  
  1171.          Data Set Ready Pin 6 (DB25), Pin 6 (DB9)
  1172.  
  1173.          The DSR line is used by the modem to signal the computer  that  it
  1174.          is ready.
  1175.  
  1176.          Request to Send Pin 4 (DB25), Pin 7 (DB9)
  1177.  
  1178.          The  RTS  line  is  used  to "turn the line around" in half duplex
  1179.          modems, and for hardware flow control in most modems that  require
  1180.          flow control.
  1181.  
  1182.          Clear to Send Pin 5 (DB25), Pin 8 (DB9)
  1183.  
  1184.          The  CTS  line  is  used  to "turn the line around" in half duplex
  1185.          modems, and for hardware flow control in most modems that  require
  1186.          flow control.
  1187.  
  1188.          Data Carrier Detect Pin 8 (DB25), Pin 1 (DB9)
  1189.  
  1190.          The DCD line is used by the modem to signal the  computer  that  a
  1191.          data carrier signal is present.
  1192.  
  1193.          Ring Indicator Pin 22 (DB25), Pin 9 (DB9)
  1194.  
  1195.          The RI line is asserted when a 'ring' occurs.
  1196.  
  1197.  
  1198.  
  1199.  
  1200.         PCL4C Users Manual                                     Page 20
  1201.          6.4 National INS8250, INS16450, and INS16550 UARTs
  1202.  
  1203.  
  1204.          The  Personal  Communications  Library  is  based  on the standard
  1205.          National INS8250, INS16450, and INS16550 UARTs. The 8250  was  the
  1206.          original  UART  used  in the IBM PC, whereas the 16450 is a faster
  1207.          version found on most 286 & up machines. The 16550 contains  a  16
  1208.          byte  FIFO  to further reduce communications overhead. These UARTs
  1209.          consists of 8 register ports as follows:
  1210.  
  1211.          Offset    R/W   Register
  1212.            0       R/W   Receiver (read) / Transmitter (write)
  1213.            1       R/W   Interrupt Enable (read)
  1214.            2       R     Interrupt Identification
  1215.            2       W     FIFO control (INS16550 only)
  1216.            3       R/W   Data Format (Line Control)
  1217.            4       R/W   RS-232 (Modem) Control
  1218.            5       R/W   Line Status
  1219.            6       R/W   RS-232 (Modem) Status
  1220.            7       R/W   Not used.
  1221.  
  1222.          The  UART  registers  are  based  at  3F8  (COM1), 2F8 (COM2), 3E8
  1223.          (COM3), and 2E8 (COM4). COM1 and COM3 share  interrupt  vector  12
  1224.          and  interrupt  request  line  IRQ4  while  COM2  and  COM4  share
  1225.          interrupt vector 11 and interrupt request line IRQ3.   This  means
  1226.          that  COM1  and  COM3  cannot  both  be  used  at  the  same time.
  1227.          Similarly, COM2 and COM4 cannot both be used at the same time.
  1228.  
  1229.  
  1230.          Port     Reg Base   IRQ Line   Vector
  1231.          COM1        3F8H        4        12
  1232.          COM2        2F8H        3        11
  1233.          COM3        3E8H        4        12
  1234.          COM4        2E8H        3        11
  1235.  
  1236.          Four sources of interrupts are possible with the 8250  and  16550:
  1237.          (1) receiver error or BREAK, (2) receiver data ready, (3) ready to
  1238.          transmit,  and  (4) RS232 input.  These four sources of interrupts
  1239.          are summarized as follows:
  1240.  
  1241.          Source of Interrupt        Action Required to Clear
  1242.          Receiver error or BREAK.   Read Line Status register.
  1243.          Receiver data.             Read data from data register.
  1244.          Transmitter Buffer Empty.  Write to data register or read IID reg.
  1245.          RS232 input.               Read Modem Status register.
  1246.  
  1247.          However,  PCL4C  only  enables  the receiving data interrupt. This
  1248.          means that interrupts can only be caused by incoming data.
  1249.  
  1250.          If  you  are not familiar with the INS8250, several good books are
  1251.          available.   Refer  to  the  Serial  Communications  chapter   for
  1252.          recommendations.    Although  a  knowledge  of  the  8250  is  not
  1253.          necessary to use PCL4C, a  general  knowledge  of  the  theory  of
  1254.          asynchronous serial communications is recommended.
  1255.  
  1256.  
  1257.  
  1258.  
  1259.  
  1260.         PCL4C Users Manual                                     Page 21
  1261.          6.5 Register Summary
  1262.  
  1263.  
  1264.          REG 0 : Data Register
  1265.  
  1266.          Reading  from  the data register fetches the next input byte, once
  1267.          it is ready.  Writing to the  data  register  transmits  the  byte
  1268.          written to it over the serial line.
  1269.  
  1270.          REG 1 : Interrupt Enable 
  1271.  
  1272.          The  Interrupt  Enable  register  enables  each  of  four types of
  1273.          interrupts when the appropriate bit is set to a one.
  1274.  
  1275.          bit 3 : Enable interrupt on RS232 input.
  1276.          bit 2 : Enable interrupt on receiver error or break.
  1277.          bit 1 : Enable interrupt on transmitter buffer empty (TBE).
  1278.          bit 0 : Enable interrupt on received data (RxRDY).
  1279.  
  1280.          REG 2 : Interrupt Identification (IID)
  1281.  
  1282.          Reading  the  Interrupt Identification (read only) register once
  1283.          an interrupt has occurred identifies the interrupt as follows:
  1284.  
  1285.          Bit 2  Bit 1  Bit 0  Priority    Interrupt
  1286.            0      0      1      none      none
  1287.            1      1      0      0 (high)  Serialization or break.
  1288.            1      0      0      1         Received data.
  1289.            0      1      0      2         Transmitter Buffer Empty.
  1290.            0      0      0      3 (low)   RS232 Input.
  1291.  
  1292.          In the INS16650, REG 2 (write  only)  is  also  the  FIFO  control
  1293.          register.   Writing  bits  6  &  7 will set the FIFO trigger level
  1294.          (number of bytes received before an interrupt is generated).
  1295.  
  1296.          Bit 7  Bit 6   Trigger             Bit 7  Bit 6   Trigger
  1297.           0      0      1 byte               1      1      8 bytes
  1298.           0      1      4 bytes              1      1      14 bytes
  1299.  
  1300.          REG 3 : Line Control
  1301.  
  1302.          RS232 line parameters are selected by writing to this register.
  1303.  
  1304.          bit 7 : DLAB = 0
  1305.          bit 6 : BREAK on(1), off(0).
  1306.          bits 5-3: Parity None(000),ODD(001),EVEN(011),MARK(101),SPACE(111)
  1307.          bit 2 : One stop bit(0), two stop bits(1).
  1308.          bits 1-0: Data bits = 5 (00), 6(01), 7(10), 8(11).
  1309.  
  1310.          When the Divisor Latch Access Bit (DLAB) is 1, registers 0  and  1
  1311.          become the LS and MS bytes of the Baud Rate Divisor registers.
  1312.  
  1313.          Baud   Divisor      Baud  Divisor      Baud  Divisor
  1314.           300    0180        4800   0018       38400   0003
  1315.          1200    0060        9600   000C       57600   0002
  1316.          2400    0030       19200   0006      115200   0001
  1317.  
  1318.  
  1319.  
  1320.         PCL4C Users Manual                                     Page 22
  1321.          REG 4 : Modem Control
  1322.  
  1323.          RTS, DTR, loopback testing, and General Purpose Outputs #1 and  #2
  1324.          are controlled by the Modem Control register as follows:
  1325.  
  1326.          bit 4 : Enable local loopback.
  1327.          bit 3 : Enable GP02. Necessary for 8250 interrupts.
  1328.          bit 2 : Enable GP01.
  1329.          bit 1 : Set / clear RTS.
  1330.          bit 0 : Set / clear DTR.
  1331.  
  1332.          REG 5 : Line Status
  1333.  
  1334.          Reading  the  Line  Status register provides status information as
  1335.          follows (1 for TRUE, 0 for FALSE) :
  1336.  
  1337.          bit 6 : Transmitter Empty.
  1338.          bit 5 : Transmitter Buffer Empty (TBE).
  1339.          bit 4 : BREAK detect.
  1340.          bit 3 : Framing error.
  1341.          bit 2 : Parity error.
  1342.          bit 1 : Overrun error.
  1343.          bit 0 : Data Ready.
  1344.  
  1345.          REG 6 : Modem Status
  1346.  
  1347.          Reading the Modem Status register provides  the  following  status
  1348.          information (1 for TRUE, 0 for FALSE) :
  1349.  
  1350.          bit 7 : DCD status.
  1351.          bit 6 : RI status.
  1352.          bit 5 : DSR status.
  1353.          bit 4 : CTS status.
  1354.          bit 3 : Delta DCD status.
  1355.          bit 2 : Delta RI status.
  1356.          bit 1 : Delta DSR status.
  1357.          bit 0 : Delta CTS status.
  1358.  
  1359.          The delta bits (bits 0 through 3) are  set  whenever  one  of  the
  1360.          status  bits  (bits 4 through 7) changes (from 0 to 1 or from 1 to
  1361.          0) since the last time that the Modem Status  register  was  read.
  1362.          Reading the Modem Status register clear the delta bits.
  1363.  
  1364.          REG 7 : Scratch Register
  1365.  
  1366.          There is no function associated with  register  7.   It  does  not
  1367.          exist in early versions of the 8250.
  1368.  
  1369.  
  1370.  
  1371.  
  1372.  
  1373.  
  1374.  
  1375.  
  1376.  
  1377.  
  1378.  
  1379.  
  1380.         PCL4C Users Manual                                     Page 23
  1381.          7.0 Terminal Emulator Example Program
  1382.  
  1383.  
  1384.          TERM is an communications program suitable for calling up bulletin
  1385.          board  systems  (BBS)  and  performing  as  a  PC  to PC file copy
  1386.          program.  TERM itself is not part of the  communications  library,
  1387.          but  rather  it  is  provided  as  an  example of a communications
  1388.          application using PCL4C.
  1389.  
  1390.          TERM  can  send a standard Hayes standard AT command set string to
  1391.          your modem.  An initialization string is  sent  by  TERM  provided
  1392.          that  the constant AT_COMMAND_SET in the file TERM.H is defined to
  1393.          be TRUE:
  1394.  
  1395.             #define AT_COMMAND_SET 1
  1396.  
  1397.          Refer to the chapter "Modem Initialization" for  a  discussion  of
  1398.          initialization strings.
  1399.  
  1400.          TERM also supports hardware flow control (RTS/CTS). Hardware  flow
  1401.          control  is observed provided that the constant RTS_CTS_CONTROL in
  1402.          the file TERM.H is defined to be TRUE:
  1403.  
  1404.             #define RTS_CTS_CONTROL 1
  1405.  
  1406.          Refer to the chapter "Flow Control" for a discussion  of  hardware
  1407.          flow control.
  1408.  
  1409.          TERM  can  also  exchange  files  using  XMODEM,   YMODEM   (batch
  1410.          capability),  and  YMODEM-G  (streaming  YMODEM  used  with  error
  1411.          correcting modems)  communications  protocols.   TERM  can  accept
  1412.          wildcards in the filename so that multiple files can be sent using
  1413.          YMODEM  and  YMODEM-G.   The  protocol timing can also be adjusted
  1414.          (this  should  not  be  necessary)  by  modifying  the   constants
  1415.          SHORT_WAIT and LONG_WAIT in the TERM.H file.
  1416.  
  1417.          TERM  can also be used as a PC to PC transfer program using a null
  1418.          modem cable. In  this  case,  AT_COMMAND_SET  and  RTS_CTS_CONTROL
  1419.          should be defined to be FALSE in the file TERM.H:
  1420.  
  1421.             #define AT_COMMAND_SET  0
  1422.             #define RTS_CTS_CONTROL 0
  1423.  
  1424.          Be  advised  that  most  null modem cables are do NOT swap RTS and
  1425.          CTS, which is necessary for hardware flow control. This means that
  1426.          RTS_CTS_CONTROL should never be set to 1 (TRUE) when using a  null
  1427.          modem  cable  unless  you are absolutely sure that RTS and CTS are
  1428.          swapped.
  1429.  
  1430.          To start TERM, type TERM followed by the port (1  to  4)  and  the
  1431.          baud  rate (300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600,
  1432.          or 115200). For example, to start TERM at 2400 baud on port COM4:
  1433.  
  1434.             TERM 4 2400
  1435.  
  1436.          The TERM program (but of course not the library itself) is  placed
  1437.          in  the  public domain by MarshallSoft Computing, Inc., and can be
  1438.          used in any way desired by the user.
  1439.  
  1440.         PCL4C Users Manual                                     Page 24
  1441.          8.0 Legal Issues
  1442.  
  1443.          8.1 Registration
  1444.  
  1445.  
  1446.          The shareware version of PCL4C.LIB is provided  so  that  you  may
  1447.          personally  determine  the usefulness of the product for yourself.
  1448.          If you can use the Personal Communications Library for  C,  please
  1449.          register  your  use  with  us. Send $45 plus $3 S&H ($6 outside of
  1450.          North America) to:
  1451.  
  1452.                   MarshallSoft Computing, Inc.
  1453.                   Post Office Box  4543
  1454.                   Huntsville AL 35815
  1455.  
  1456.          Please pay by check in US dollars drawn on a  US  bank.   Purchase
  1457.          Orders (POs) are accepted from recognized US schools and companies
  1458.          listed  in  Dunn  &  Bradstreet.   Print  the file PCL4C.INV if an
  1459.          invoice is needed. The registered package is mailed first class US
  1460.          Mail (packet air mail overseas). If you are  in  a  hurry,  please
  1461.          call  us and we can ship immediately within the USA by COD (street
  1462.          address and phone number required).
  1463.  
  1464.          The registered package includes:
  1465.  
  1466.          o  Small, Compact, Medium & Large memory model libraries without
  1467.             the shareware screens.
  1468.          o  Assembler source code for the library.
  1469.          o  Printed Users Manual.
  1470.          o  Printed Reference Manual.
  1471.          o  Telephone, FAX, and BBS support for one year.
  1472.          o  One year subscription (quarterly) to MSC newsletter.
  1473.          o  All updates (with printed manuals) are $15  plus  $3  S&H
  1474.             ($6 outside of North America).
  1475.  
  1476.          PCL4C.ASM is the source code for the library. The source  code  is
  1477.          copyrighted  by MarshallSoft Computing, Inc. The user is granted a
  1478.          license to use the PCL4C object code in his own application  only.
  1479.          PCL4C.ASM  is  not  shareware and may not be sold or given away to
  1480.          anyone.
  1481.  
  1482.          The registered user will receive the latest version  of  PCL4C  by
  1483.          return  mail.  A 5.25" diskette is provided unless a 3.5" diskette
  1484.          is requested.
  1485.  
  1486.  
  1487.  
  1488.  
  1489.  
  1490.  
  1491.  
  1492.  
  1493.  
  1494.  
  1495.  
  1496.  
  1497.  
  1498.  
  1499.  
  1500.         PCL4C Users Manual                                     Page 25
  1501.          8.2 License
  1502.  
  1503.  
  1504.          MarshallSoft  Computing,  Inc. grants the registered user of PCL4C
  1505.          the right to use one copy of the PCL4C library (in object form) on
  1506.          a single computer in  the  development  of  any  software  product
  1507.          without  any  royalties.  The user may not use the library on more
  1508.          than one computer at the same  time.   The  source  code  for  the
  1509.          library (PCL4C.ASM) may not be released in whole or in part.
  1510.  
  1511.  
  1512.          8.3 Warranty
  1513.  
  1514.  
  1515.          MARSHALLSOFT COMPUTING, INC. DISCLAIMS ALL WARRANTIES RELATING  TO
  1516.          THIS  SOFTWARE,  WHETHER  EXPRESSED  OR IMPLIED, INCLUDING BUT NOT
  1517.          LIMITED TO ANY IMPLIED WARRANTIES OF MERCHANTABILITY  AND  FITNESS
  1518.          FOR  A  PARTICULAR  PURPOSE, AND ALL SUCH WARRANTIES ARE EXPRESSLY
  1519.          AND SPECIFICALLY DISCLAIMED. NEITHER MARSHALLSOFT COMPUTING,  INC.
  1520.          NOR ANYONE ELSE WHO HAS BEEN INVOLVED IN THE CREATION, PRODUCTION,
  1521.          OR  DELIVERY  OF  THIS  SOFTWARE SHALL BE LIABLE FOR ANY INDIRECT,
  1522.  
  1523.          CONSEQUENTIAL, OR INCIDENTAL DAMAGES ARISING OUT  OF  THE  USE  OR
  1524.          INABILITY  TO  USE  SUCH  SOFTWARE EVEN IF MARSHALLSOFT COMPUTING,
  1525.          INC.  HAS BEEN ADVISED OF  THE  POSSIBILITY  OF  SUCH  DAMAGES  OR
  1526.          CLAIMS. IN NO EVENT SHALL MARSHALLSOFT COMPUTING, INC.'S LIABILITY
  1527.          FOR ANY SUCH DAMAGES EVER EXCEED THE PRICE PAID FOR THE LICENSE TO
  1528.          USE  THE SOFTWARE, REGARDLESS OF THE FORM OF THE CLAIM. THE PERSON
  1529.          USING  THE  SOFTWARE  BEARS  ALL  RISK  AS  TO  THE  QUALITY   AND
  1530.          PERFORMANCE OF THE SOFTWARE.
  1531.  
  1532.          Some  states  do not allow the exclusion of the limit of liability
  1533.          for consequential or incidental damages, so the  above  limitation
  1534.          may not apply to you.
  1535.  
  1536.          This  agreement  shall  be  governed  by  the laws of the State of
  1537.          Alabama and shall inure to the benefit of Marshallsoft  Computing,
  1538.          Inc.   and  any successors, administrators, heirs and assigns. Any
  1539.          action or proceeding brought by either  party  against  the  other
  1540.          arising  out of or related to this agreement shall be brought only
  1541.          in a STATE or FEDERAL COURT of competent jurisdiction  located  in
  1542.          Madison County, Alabama. The parties hereby consent to in personam
  1543.          jurisdiction of said courts.
  1544.  
  1545.  
  1546.  
  1547.  
  1548.  
  1549.  
  1550.  
  1551.  
  1552.  
  1553.  
  1554.  
  1555.  
  1556.  
  1557.  
  1558.  
  1559.  
  1560.         PCL4C Users Manual                                     Page 26
  1561.          9.0 Summary
  1562.  
  1563.          9.1 Revision History
  1564.  
  1565.          Version 1.0 -- 14 January 1991 -- original release.
  1566.  
  1567.          Version 1.1 -- 11 March 1991
  1568.  
  1569.          o  Added SioUnGetc() function to library.
  1570.  
  1571.          Version 1.2 -- 1 June 1991
  1572.  
  1573.          o  SioParms() bug -- could not call before SioReset.
  1574.          o  SioReset() bug -- was not saving & restoring all regs.
  1575.  
  1576.          Version 1.3 -- 1 July 1991
  1577.  
  1578.          o  Added NORESET option to SioReset.
  1579.          o  Added SioDSR, SioCTS, SioDCD, SioLoopBack, and SioRI.
  1580.  
  1581.          Version 2.0 -- 1 Nov 1991
  1582.  
  1583.          o  Reorganized as four memory model libraries.
  1584.          o  Added SioModel function to library.
  1585.          o  Added support for Quick C and Power C.
  1586.  
  1587.          Version 2.1 -- 1 Dec 1991
  1588.  
  1589.          o  Fixed bug due to Microsoft Assembler (MASM 5.0,5.1) error.
  1590.  
  1591.          Version 3.0 -- 15 Jan 1991
  1592.  
  1593.          o  Added SioUART function.
  1594.          o  Added "UART undefined" error code.
  1595.          o  Added "Bad or missing UART" error code.
  1596.          o  Added "Port already enabled" error code.
  1597.          o  Added "Cannot enable both COM1 & COM3 ..." error code.
  1598.          o  Fixed several minor bugs (using new automated testing).
  1599.  
  1600.          Version 3.1 -- 1 March 1992
  1601.  
  1602.          o  Added SioFIFO (INS16550 support).
  1603.          o  Added SioIRQ function.
  1604.          o  Increased maximum receive buffer size to 32K bytes.
  1605.  
  1606.          Version 3.2 -- 1 May 1992
  1607.  
  1608.          o  Modified SioReset so that it no longer clears DTR & RTS.
  1609.          o  Modified SioModel & renamed to SioInfo.
  1610.          o  Fixed bug in SioDone when using 2 ports simultaneously.
  1611.          o  Added SioFlow to library.
  1612.          o  Added YMODEM-G protocol to TERM program.
  1613.  
  1614.          Version 3.3 -- 3 August 1992
  1615.  
  1616.          o  Fixed bug in SioUnGet when using 2 ports simultaneously.
  1617.          o  Add SioRead function.
  1618.  
  1619.  
  1620.         PCL4C Users Manual                                     Page 27
  1621.          9.2 Function Summary
  1622.  
  1623.  
  1624.          Refer to the  PCL4C  Reference  Manual  (PCL4C.REF)  for  detailed
  1625.          information  on  the  communications  and support functions. A one
  1626.          line summary of each function follows:
  1627.  
  1628.  
  1629.          SioBaud     Sets the baud rate of the selected port.
  1630.          SioBrkKey   Returns non-zero if the Control-BREAK key was pressed.
  1631.          SioBrkSig   Asserts, cancels, or detects BREAK signal.
  1632.          SioCrtWrite Write character to the screen.
  1633.          SioCTS      Reads the Clear to Send (CTS) modem status bit.
  1634.          SioDCD      Reads the Data Carrier Detect (DCD) modem status bit.
  1635.          SioDelay    Delays one or more tics (18 tics per second).
  1636.          SioDone     Terminates further serial processing.
  1637.          SioDSR      Reads the Data Set Ready (DSR) modem status bit.
  1638.          SioDTR      Set, clear, or read the Data Terminal Ready (DTR) bit.
  1639.          SioError    Displays error in text.
  1640.          SioFIFO     Sets the interrupt level for the INS16550.
  1641.          SioFlow     Enables / disables hardware flow control.
  1642.          SioGetc     Reads the next character from the serial line.
  1643.          SioKeyPress Detects if keyboard has been pressed.
  1644.          SioKeyRead  Reads the keyboard.
  1645.          SioInfo     Returns library version number & memory model.
  1646.          SioIRQ      Assigns an IRQ line to a port.
  1647.          SioLine     Reads the line status register.
  1648.          SioLoopBack Performs a UART loopback test.
  1649.          SioModem    Reads the modem status register.
  1650.          SioParms    Sets parity, stop bits, and word length.
  1651.          SioPutc     Transmit a character over a serial line.
  1652.          SioRead     Reads any of 7 UART ports.
  1653.          SioReset    Initialize a serial port for processing.
  1654.          SioRI       Reads the Ring Indicator (RI) modem status bit.
  1655.          SioRTS      Sets, clears, or reads the Request to Send (RTS) line.
  1656.          SioRxBuf    Sets up receive buffer.
  1657.          SioRxFlush  Flushes (clears) the receive buffer.
  1658.          SioRxQue    Returns the number of characters in the receive queue.
  1659.          SioTimer    Returns the number of system clock tics.
  1660.          SioUART     Sets the UART base address.
  1661.          SioUnGetc   "Un-gets" (puts back) a specified character.
  1662.  
  1663.  
  1664.          9.3 Further Reading
  1665.  
  1666.  
  1667.          The best way to learn about serial communications  is  to  read  a
  1668.          good  book  on the subject. Several good texts are available.  Two
  1669.          that I like are:
  1670.  
  1671.          (1) C Programmers's Guide to Serial Communications by Joe Campbell
  1672.          (SAMS)
  1673.  
  1674.          (2) Mastering Serial Communications by Peter Gofton (SYBEX).
  1675.  
  1676.  
  1677.  
  1678.  
  1679.  
  1680.         PCL4C Users Manual                                     Page 28
  1681.          10.0 Other MarshallSoft Computing Products
  1682.  
  1683.          10.1 The Personal Communications Library for Pascal
  1684.  
  1685.          The  Personal Communications Library for Pascal (PCL4P) is a Turbo
  1686.          Pascal version of the Personal Communications Library for  C,  and
  1687.          is  available  for  $45 plus $3 S&H ($6 S&H overseas). It contains
  1688.          the same library functions, example programs,  documentation,  and
  1689.          user support.
  1690.  
  1691.          10.2 The Personal Protocol Library for C
  1692.  
  1693.          The  Personal  Protocol  Library for C (PPL4C) consists of a state
  1694.          driven C language library  which  implements  XMODEM,  XMODEM-CRC,
  1695.          XMODEM-1K, XMODEM-G, YMODEM, and YMODEM-G file transfer protocols.
  1696.          This  allows  the  communications  application  to  run  two ports
  1697.          simultaneously while interacting with the user  at  the  keyboard.
  1698.          The  state  drive library functionally emulates background tasking
  1699.          with standard MSDOS.
  1700.  
  1701.          The primary application area for the protocol library  is  in  the
  1702.          development  of custom BBS programs (and programs that call BBS's)
  1703.          which  require  either  multiple  lines  or  which  require   user
  1704.          interaction  while  a  file transfer is underway. The state driven
  1705.          architecture can  also  be  used  as  a  framework  and  guide  to
  1706.          developing customized file transfer protocols.
  1707.  
  1708.          The protocol library (PPL4C) requires the C communications library
  1709.          PCL4C.   The  PPL4C  comes  with fully commented C source code, an
  1710.          example  program  which  can  transmit  or   receive   two   files
  1711.          simultaneously,  printed documentation, and one year of telephone,
  1712.          FAX, and BBS support.
  1713.  
  1714.          The Personal Protocol Library for C is available for $35  plus  $3
  1715.          S&H ($6 S&H overseas).  It can also be ordered together with the C
  1716.          communications  library  for  $65  for  both,  plus  $3.50 S&H ($7
  1717.          overseas).
  1718.  
  1719.          10.3 The Personal Protocol Library for Pascal
  1720.  
  1721.          The Personal Protocol Library for Pascal (PPL4P) is a Turbo Pascal
  1722.          version  of  the Personal Protocol Library for C, and is available
  1723.          for $35 plus $3 S&H ($6  S&H  overseas).   It  contains  the  same
  1724.          library  functions,  example  programs,  documentation,  and  user
  1725.          support.
  1726.  
  1727.          The Personal Protocol Library for Pascal is available for $35 plus
  1728.          $3  S&H  ($6  S&H overseas).  It can also be ordered together with
  1729.          the Pascal communications library for $65 for both, plus $3.50 S&H
  1730.          ($7 overseas).
  1731.  
  1732.  
  1733.  
  1734.  
  1735.  
  1736.  
  1737.  
  1738.  
  1739.  
  1740.         PCL4C Users Manual                                     Page 29
  1741.  
  1742.